#define AREF 1.08           //  <--|
#define Shunt 0.1           //  <--|
                            //  <----- Подобрать для точного измерения A и V
#define R16 27              //  <--| 
#define R17 1               //  <--|

#define Vmin 0.01           // Минимальный порог чуствительности напряжения
#define Amin 0.03           // Минимальный порог чувствительности тока

#define Amax 2              // Максимальный предельный ток нагрузки.

#define aPin A0
#define vPin A1

float V = 0;
float A = 0;
float Anow = 0;

float sumV = 0;
float sumA = 0;

int analV = 0;
int analA = 0;

unsigned long meterUpd = 0;
int meterPeriod = 500; //ms

long N = 0;

float K = (R16 + R17) / R17;

void meters_handler() {
  if(!regulator_getState()){
    A = 0;
    V = 0;
    return;
  }
  unsigned long ms = millis();
  
  analV = analogRead(vPin);
  analA = analogRead(aPin);
  Anow = analA * AREF / Shunt / 1024;

  sumV += analV;
  sumA += analA;
  N++;

  if((ms - meterUpd) > meterPeriod){
     V = sumV * AREF * K / 1024 / N;
     A = sumA * AREF / Shunt / 1024 / N;
     meterUpd = ms;
     N = 0;
     sumV = 0;
     sumA = 0;

     if(V <= Vmin) V = 0;
     if(A <= Amin) A = 0;
  }
  
}

float meter_A(){
  return A;
}

float meter_V(){
  return V;
}

bool isOverdrive(){
  if(Anow > Amax) return true;
  return false;
}


